JSTL(JSP Standard Tag Library)

✒️ 2025-06-12 15:18 내용 수정


참고 자료 : 위키백과 자바서버 페이지 표준 태그 라이브러리, nemo's Java JSTL 정리, Leica's JSP JSTL 사용 방법 - 주요 태그 문법 정리

Java EE 기반의 웹 어플리케이션 개발 플랫폼을 위한 컴포넌트 모음


사전 준비

라이브러리 추가

  1. apache-tomcat-9.0.83\webapps\examples\WEB-INF\lib 폴더에 있는 jar 파일 2개를 복사한다.

jstl 2.png

  1. apache-tomcat-9.0.83\lib 에 복사한 jar 파일을 붙여넣기 한다.
    • 앞으로 사용할 라이브러리는 이 위치에 넣는다.
    • 오라클과 연동#사전 준비의 2번의 라이브러리들도 모두 이 위치에 넣어두면 사용 가능

jstl 1.png

디렉티브 태그 추가

<!-- JSTL(JSP Standard Tag Library) -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- fmt(Format) : 출력형식(날짜, 숫자 등) -->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

core 태그 라이브러리

태그 설명
<c:set> 변수를 생성하고 초기화. Servlet 보관소에 변수를 저장함
<c:remove> Servlet 보관소에 저장된 값 제거
<c:out> 출력
<c:if> Java의 if문과 비슷
<c:choose> Java의 switch문과 비슷
<c:when> Java의 switch문 내의 case절과 비슷
<c:otherwise> Java의 switch문 내의 default절과 비슷
<c:forEach> Java의 for문과 비슷
<c:redirect> response.sendRedirect와 비슷한 역할로, JSP 페이지 호출
<c:import> 현재 JSP 페이지에 다른 페이지 결과를 포함. 웹 페이지 외의 다른 종류의 웹 자원도 가능
<c:url> url을 저장하기 위한 변수 선언

<c:set>

<c:set var="변수명" value="값" scope="보관소위치"/>
<c:set var="변수명" scope="보관소위치">값</c:set>
<body>
	<c:set var="test" value="변수를 선언함" scope="request"/>
	test : ${test}
</body>

jstl 3.png

<c:remove>

<c:remove var="변수명" scope="보관소위치"/>
<body>
	<c:set var="test2" value="삭제해보기" scope="page"/>
	test2 : ${test2} <br>
	<c:set var="test2" scope="page"/>
	test2가 제거 되었을까? : ${empty test2} <br>
</body>

jstl 4.png

<c:out>

<c:out value="출력값" default="기본값"/>
<c:out value="출력값">기본값</c:out>
<body>
	<c:out value="<c:out>으로 출력해보기"/>
</body>

jstl 10.png

<c:if>

<c:if test="조건식" var="변수명" scope="보관소위치">
	조건이 true일 때 수행할 내용
</c:if>
<%
	int number = 10;
	request.setAttribute("number", number);
%>
<body>
	<c:if test="${(number % 2) eq 0}">
	${number}는 2의 배수다.
	</c:if>
</body>

jstl 11.png

<c:choose>, <c:when>, <c:otherwise>

<c:choose>
	<c:when test="조건식1">
		조건1이 true일 때 수행할 내용
	</c:when>
	<c:when test="조건식2">
		조건2가 true일 때 수행할 내용
	</c:when>
	<c:otherwise>
		모든 조건에 해당하지 않을 때 수행할 내용
	</c:otherwise>
</c:choose>
<body>
	<c:choose>
		<c:when test="${param.msg eq 1}">querystring이 1과 같다.</c:when>
		<c:when test="${param.msg eq 3}">querystring이 3과 같다.</c:when>
		<c:otherwise>querystring이 1도 3도 아니다.</c:otherwise>
	</c:choose>
</body>

jstl 5.png

<c:forEach>

<!-- for문과 비슷 -->
<c:forEach var="변수명" begin="시작값" end="끝값" step="증감">
	반복 수행할 내용
</c:forEach>

<!-- 향상된 for문/forEach 문과 비슷 -->
<c:forEach var="변수명" items="목록데이터" varStatus="cnt">
	목록 데이터를 순차적으로 꺼내서 수행할 내용
	<!-- cnt:count : 개수
		 cnt:index : 인덱스 -->
</c:forEach>
<%
	Map<String, Integer> map = new HashMap<>();
	map.put("사과", 1);
	map.put("참외", 2);
	map.put("포도", 3);
	
	request.setAttribute("map", map);
%>
<body>
	<c:forEach var="i" begin="1" end="10" step="1">
		<c:if test="${i mod 2 eq 1}">
			<font color="red">${i}는 홀수</font><br>
		</c:if>
		<c:if test="${i mod 2 eq 0}">
			<font color="blue">${i}는 짝수</font><br>
		</c:if>
	</c:forEach>
	<hr>
	
	<c:forEach var="m" items="${map}" varStatus="cnt">
		${cnt.count} : ${m} <br>
	</c:forEach>
</body>

jstl 6.png

<c:redirect>

<c:redirect url="페이지주소"/>

<!-- 웹 페이지를 호출하면서 데이터를 넘겨줄 때 -->
<c:redirect url="페이지주소"/>
	<c:param name="이름" value="값"/>
</c:redirect>
<body>
	<c:redirect url="test.jsp"/>
</body>
<body>
	test 페이지를 호출했습니다.
</body>

<c:import>

<c:import url="페이지주소"/>

<!-- 웹 페이지를 호출하면서 데이터를 넘겨줄 때 -->
<c:import url="페이지주소">
	<c:param name="이름" value="값"/>
</c:import>

<c:url>

<c:url var="변수명" url="페이지주소"/>

<!-- URL을 생성하고 데이터를 넘겨줄 때 -->
<c:url var="변수명" url="페이지주소"/>
	<c:param name="이름" value="값"/>
</c:url>

format 태그 라이브러리

태그 설명
<fmt:formatNumber> 숫자를 원하는 형식으로 표현
<fmt:formatDate> 날짜 객체를 원하는 형식으로 표현

<fmt:formatNumber>

<fmt:formatNumber value="숫자객체"/>
<%
	int n = 289479257;
	request.setAttribute("n", n);
%>
<body>
	<fmt:formatNumber value="${n}"/>
</body>

jstl 8.png

<fmt:formatDate>

<fmt:formatDate value="java.util.Date 객체" pattern="날짜패턴"
<%
	Date today = new Date();
	request.setAttribute("today", today);
%>
<body>
	<fmt:formatDate value="${today}" pattern="yyyy년 MM월 dd일 hh시 mm분"/>
</body>

jstl 9.png


Connected Pages
On this page
  • 사전 준비
    1. 라이브러리 추가
    2. 디렉티브 태그 추가
  • core 태그 라이브러리 , , format 태그 라이브러리